﻿using System;
using System.Linq;

namespace BrasilFramework.Comum.Utilitario
{
    public static class Calculadora
    {
        public enum PeriodoCobranca
        {
            Inicio,
            Fim
        }

        public static double PMT(double juros, double quantidadeParcela, double valorAtual, double valorFuturo = 0, PeriodoCobranca periodoCobranca = PeriodoCobranca.Fim)
        {
            return -juros*(valorFuturo + valorAtual*Math.Pow(1 + juros, quantidadeParcela))/
                   ((Math.Pow(1 + juros, quantidadeParcela) - 1)*
                    (1 + juros*(periodoCobranca == PeriodoCobranca.Fim ? 0 : 1)));
        }

        public static decimal AplicarPercentual(this decimal valor, decimal percentual, int casasDecimais = 2)
        {
            return Math.Round(valor + (valor * (percentual / 100)), casasDecimais);
        }

        public static decimal[] GerarParcelas(this decimal valor, int quantidade = 1, decimal valorEntrada = 0)
        {
            if (valor == 0) return new decimal[] { 0 };

            var valoresParcelados = new decimal[quantidade];
            var valorParcelado = Math.Round(((valor - valorEntrada) / (quantidade - (valorEntrada > 0 ? 1 : 0))), 2);

            valoresParcelados[0] = valorEntrada;

            for (var i = (valorEntrada > 0 ? 1 : 0); i < quantidade - 1; i++)
                valoresParcelados[i] = valorParcelado;

            valoresParcelados[valoresParcelados.Length - 1] = valor - valoresParcelados.Sum();

            return valoresParcelados;
        }
    }
}
